package com.aterrizar.jsf;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.context.FacesContext;


import aterrizar.Aeropuerto;
import aterrizar.Ubicacion;
import aterrizar.persistencia.PersistenciaHardcodeFactory;

/**
 * @author Exe
 */
public class AdministrarAeropuertosBean {

    private HtmlDataTable dataTable;
    private HtmlInputHidden dataItemId = new HtmlInputHidden();
	private int indice;

    private Aeropuerto aeropuerto;
	private List<Aeropuerto> aeropuertos;
	private String
		nombre,
		ciudad,
		provincia,
		pais;
	private Double
		latitud,
		longitud;

	public AdministrarAeropuertosBean() {
		indice = -1;
		cargar();
	}
	
	private void cargar() {
		aeropuertos = PersistenciaHardcodeFactory.getInstancia().getAeropuertos();
		//AeropuertoDAO aeropuertoDAO = new AeropuertoDAO();
		//aeropuertos = aeropuertoDAO.findAll();
	}
	
	public String crear() {
		indice = -1;

		nombre = null;
		ciudad = null;
		provincia = null;
		pais = null;
		latitud = null;
		longitud = null;
		
		return "editar";
	}

	public String editar() {
		// Obtengo la fila completa
		indice = dataTable.getRowIndex();

		aeropuerto = aeropuertos.get(indice);
		nombre = aeropuerto.getNombre();
		ciudad = aeropuerto.getCiudad();
		provincia = aeropuerto.getProvincia();
		pais = aeropuerto.getPais();
		latitud = aeropuerto.getUbicacion().getLatitud();
		longitud = aeropuerto.getUbicacion().getLongitud();
	
		return "editar";
	}
/*	private void persistirAeropuerto(){
		AeropuertoDAO aeropuertoDAO = new AeropuertoDAO();
		UbicacionDAO ubicacionDAO = new UbicacionDAO();
		ubicacionDAO.getSession().beginTransaction().begin();
		ubicacionDAO.save(aeropuerto.getUbicacion());
		ubicacionDAO.getSession().beginTransaction().commit();
		aeropuertoDAO.getSession().beginTransaction().begin();
		aeropuertoDAO.save(aeropuerto);
		aeropuertoDAO.getSession().beginTransaction().commit();
	}*/
	public String guardar() {
		boolean error = false;
		
		latitud = getLatitud();
		if (-90 > latitud || latitud > 90) {
			FacesContext.getCurrentInstance()
				.addMessage("aeropuertoForm:latitud",
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "La latitud debe estar comprendida entre -90 y 90.", null));
			error = true;
		}
		longitud = getLongitud();
		if (-90 > longitud || longitud > 90) {
			FacesContext.getCurrentInstance()
				.addMessage("aeropuertoForm:longitud",
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "La longitud debe estar comprendida entre -90 y 90.", null));
			error = true;
		}
		if (error)
			return null;
		
		aeropuerto = new Aeropuerto(getNombre(), getCiudad(), getProvincia(), getPais(),
				new Ubicacion(getLatitud(), getLongitud()));
		
		if (indice == -1) {
			//aeropuertos.add(aeropuerto);
			PersistenciaHardcodeFactory.getInstancia().getAeropuertos().add(aeropuerto);
		}
		else {
			//aeropuertos.set(indice, aeropuerto);
			PersistenciaHardcodeFactory.getInstancia().getAeropuertos().set(indice, aeropuerto);
		}
		
		//persistirAeropuerto();
		//TODO guardar a DAO
		//DAO.guardar(dataItem);
		
		//aviones.add(dataItem);
		
		cargar();
		return "listar";
	}

	public String listar() {
		return "listar";
	}

	//-------------------------------------

	public HtmlInputHidden getDataItemId() {
		return dataItemId;
	}

	public void setDataItemId(HtmlInputHidden dataItemId) {
		this.dataItemId = dataItemId;
	}

	public HtmlDataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(HtmlDataTable dataTable) {
		this.dataTable = dataTable;
	}

	public Aeropuerto getAeropuerto() {
		return aeropuerto;
	}

	public void setAeropuerto(Aeropuerto aeropuerto) {
		this.aeropuerto = aeropuerto;
	}

	public List<Aeropuerto> getAeropuertos() {
		return aeropuertos;
	}

	public void setAeropuertos(List<Aeropuerto> aeropuertos) {
		this.aeropuertos = aeropuertos;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getCiudad() {
		return ciudad;
	}

	public void setCiudad(String ciudad) {
		this.ciudad = ciudad;
	}

	public String getProvincia() {
		return provincia;
	}

	public void setProvincia(String provincia) {
		this.provincia = provincia;
	}

	public String getPais() {
		return pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	public Double getLatitud() {
		return latitud;
	}

	public void setLatitud(Double latitud) {
		this.latitud = latitud;
	}

	public Double getLongitud() {
		return longitud;
	}

	public void setLongitud(Double longitud) {
		this.longitud = longitud;
	}
}
